package basic10;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.spi.DirStateFactory.Result;

public class J18_JDBCSetup {

	// JDBC 접속정보
	private static final String DRV = "oracle.jdbc.OracleDriver";
	private static final String URL = "jdbc:oracle:thin:@//localhost:1521/xe";
	private static final String USR = "scott";
	private static final String PWD = "TIGER";

	//SQL문 작성 
	private static final String insertSQL = 
			"insert into SungJuk (sjno,name,kor,eng,mat) values(sjno.nextval,'김철수',78,99,74)";
	private static final String selectSQL = "select * from SungJuk order by sjno desc";
	
	
	public static void main(String[] args) {
		// 오라클을 이용한 JDBC 프로그래밍 기초
		// 1.JDBC드라이버를 메모리에 적재하여 객체로 생성하고 이것을 DriverManager에 등록
		
		// 2.DriverManager의 getConnection메서드를 이용해서 데이터베이스 연결객체를 생성함
		
		// 3.PreparedStatement로 tlfgodgkf SQL문 객체를 생성
		
		// 4-1.실행하는 SQL문이 insert,update,delete라면 executeQuery()를 사용하고
		// 실행결과는 int으로 받음.
		// 4-2.실행하는 SQL문이 select라면 executeQuery()를 사용하고
		// 실행결과는 ResultSet으로 받음.
		
		// 5.ResultSet으로 받은 결과 테이블은 먼저 rs.next()로 읽어올 레코드를 가리킨 후
		// rs.getXXX(필드번호) 또는 rs.getXXX(필드이름)으로 테이블의 각 필드값을 처리할 수 있음.
		
		// 6.JDBC 작업이 끝나면 데이터베이스 접속을 끊고 관련객체 (conn,ps,rs)는 메모리에서 제거함. 
		
		

		Connection conn = null; // 연결객체 저장용
		PreparedStatement ps=null;//SQL객체
		ResultSet rs = null;//실행결과 저장용
		
		try {
			Class.forName(DRV);// 1.
			conn = DriverManager.getConnection(URL, USR, PWD); // 2.
			ps = conn.prepareStatement(insertSQL);
			int cnt = ps.executeUpdate(); //4.
			System.out.println(cnt + "건의 데이터 입력");
			ps.close(); //또다른 SQL문 작성하기 위해 기존 ps 객체를 제거
			
			ps=conn.prepareStatement(selectSQL);
			rs=ps.executeQuery();
			
			//ResultSet에서 결과를 레코드 단위로 꺼내 차례대로 출력
			while(rs.next()){
				// 5.ResultSet에서 읽어올 레코드가 있으면 
				System.out.println(rs.getInt(1));
				System.out.println(rs.getString("name"));
			}

		} catch (Exception ex) {
			ex.printStackTrace();
		}
		finally {
			//6.
			//JDBC작업이 끝난 후 메모리에서 객체 제거
			if (rs != null)
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			if (ps != null)
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			if (conn != null)
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}

	}
	}

}
